/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package org.pepsoft.worldpainter.operations; import java.awt.Font; import java.awt.GraphicsEnvironment; import java.awt.Window; import java.util.ArrayList; import java.util.List; import javax.swing.DefaultComboBoxModel; import javax.swing.JComboBox; import org.pepsoft.worldpainter.WorldPainterDialog; /** * * @author pepijn */ public class TextDialog extends WorldPainterDialog { /** * Creates new form TextDialog */ public TextDialog(Window parent, String defaultFont, int defaultSize, String text) { super(parent); renderSize = new JComboBox().getFont().getSize(); initComponents(); String[] fontFamilyNames = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames(); List<String> usableFonts = new ArrayList<>(fontFamilyNames.length); for (String fontFamilyName: fontFamilyNames) { Font font = new Font(fontFamilyName, Font.PLAIN, renderSize); // This is intended to weed out symbol fonts and the like, not fonts // for non western scripts. Hopefully those will always also include // the latin script if (font.canDisplay('A')) { usableFonts.add(fontFamilyName); } } jComboBox1.setModel(new DefaultComboBoxModel(usableFonts.toArray())); jComboBox1.setSelectedItem(defaultFont); jComboBox1.setRenderer(new FontListCellRenderer(renderSize)); jSpinner1.setValue(defaultSize); if (text != null) { jTextArea1.setText(text); jTextArea1.selectAll(); } jTextArea1.requestFocusInWindow(); rootPane.setDefaultButton(jButton2); pack(); setLocationRelativeTo(parent); } public String getText() { return jTextArea1.getText(); } public Font getSelectedFont() { return new Font((String) jComboBox1.getSelectedItem(), (jToggleButton1.isSelected() ? Font.BOLD : Font.PLAIN) | (jToggleButton2.isSelected() ? Font.ITALIC : Font.PLAIN), (Integer) jSpinner1.getValue()); } public int getSelectedAngle() { return jComboBox2.getSelectedIndex(); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jComboBox1 = new javax.swing.JComboBox(); jSpinner1 = new javax.swing.JSpinner(); jToggleButton1 = new javax.swing.JToggleButton(); jToggleButton2 = new javax.swing.JToggleButton(); jScrollPane1 = new javax.swing.JScrollPane(); jTextArea1 = new javax.swing.JTextArea(); jButton1 = new javax.swing.JButton(); jButton2 = new javax.swing.JButton(); jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel(); jComboBox2 = new javax.swing.JComboBox(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle("Enter Text"); jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); jSpinner1.setModel(new javax.swing.SpinnerNumberModel(18, 1, 999, 1)); jToggleButton1.setFont(jToggleButton1.getFont().deriveFont(jToggleButton1.getFont().getStyle() | java.awt.Font.BOLD)); jToggleButton1.setText("B"); jToggleButton1.setToolTipText("Bold"); jToggleButton2.setFont(jToggleButton2.getFont().deriveFont((jToggleButton2.getFont().getStyle() | java.awt.Font.ITALIC))); jToggleButton2.setText("I"); jToggleButton2.setToolTipText("Italic"); jTextArea1.setColumns(20); jTextArea1.setRows(5); jScrollPane1.setViewportView(jTextArea1); jButton1.setText("Cancel"); jButton1.addActionListener(this::jButton1ActionPerformed); jButton2.setText("OK"); jButton2.addActionListener(this::jButton2ActionPerformed); jLabel1.setText("Font:"); jLabel2.setText("Size:"); jLabel3.setText("Angle:"); jComboBox2.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "0 °", "-90 °", "180 °", "90 °" })); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addGap(0, 0, Short.MAX_VALUE) .addComponent(jButton2) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jButton1)) .addComponent(jScrollPane1) .addGroup(layout.createSequentialGroup() .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel2) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jSpinner1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jToggleButton1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jToggleButton2) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel3) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jComboBox2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 77, Short.MAX_VALUE))) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jSpinner1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jToggleButton1) .addComponent(jToggleButton2) .addComponent(jLabel1) .addComponent(jLabel2) .addComponent(jLabel3) .addComponent(jComboBox2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 304, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jButton1) .addComponent(jButton2)) .addContainerGap()) ); pack(); }// </editor-fold>//GEN-END:initComponents private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed ok(); }//GEN-LAST:event_jButton2ActionPerformed private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed cancel(); }//GEN-LAST:event_jButton1ActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton jButton1; private javax.swing.JButton jButton2; private javax.swing.JComboBox jComboBox1; private javax.swing.JComboBox jComboBox2; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JSpinner jSpinner1; private javax.swing.JTextArea jTextArea1; private javax.swing.JToggleButton jToggleButton1; private javax.swing.JToggleButton jToggleButton2; // End of variables declaration//GEN-END:variables private final int renderSize; }